package com.zf.runtime;

import java.io.IOException;
import java.nio.charset.Charset;

/**
 * Runtime 类
 */
public class RuntimeTest {
    public static void main(String[] args) throws IOException {
        long gb = 1024 * 1024 * 1024;

        // 获取运行时
        Runtime runtime = Runtime.getRuntime();
        // 获取处理器的逻辑核数量（超线程核心算2个）
        int availableProcessors = runtime.availableProcessors();
        System.out.println(availableProcessors);


        // 注册一个钩子，在 当前JVM进程终止时，执行钩子里的内容
        Thread thread = new Thread(() -> {
            System.out.println("钩子执行了");
        });
        runtime.addShutdownHook(thread);

        // 移除一个钩子
        // runtime.removeShutdownHook(thread);


        // 强制停止当前JVM进程，不会执行钩子方法
        // runtime.halt(-2);

        // 正常停止当前JVM进程，会执行钩子方法
        // runtime.exit(-3);
        // System.exit(-3);

        // JVM实例可以使用的最大内存 由 "Xmx2048m" 显示配置，默认值根据主机环境不同而不同
        System.out.println(runtime.maxMemory() / gb);

        // 执行命令, 打印输出
        Process process = runtime.exec("cmd.exe /c dir d:\\");
        System.out.println(new String(process.getInputStream().readAllBytes(), Charset.forName("GB2312")));
    }
}
